﻿/*
SINACOR - BMF&Bovespa
Arquivo: DigitoVerificadorCliente.cs
Criado em: 14-mai-2010 17:57:06
Arquiteto Responsável: p-dmartinelli
*/
using System;
using System.Collections.Generic;
using System.Text;
using Sinacor.Infra.Common.Validation;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Service.ExceptionHandling;
using Sinacor.Infra.Service.Validation;
using Sinacor.Infra.Service.Validation.BusinessRules;
using Sinacor.Servico.Bovespa.Alocacao.BusinessEntity;


namespace Sinacor.Servico.Bovespa.Alocacao.BusinessLogic.BusinessRuleValidation
{
    public class DigitoVerificadorCliente : BaseBusinessRuleValidation<NegocioAlocadoDireto>, IBusinessRuleValidation
    {
        #region Atributos
        private int _dvClienteInvalido = 520003;
        private int _erroObjetoNulo = 314816;
        #endregion
        #region Propriedades
        public int DVClienteInvalido
        {
            get { return _dvClienteInvalido; }
            set { _dvClienteInvalido = value; }
        }

        public int ErroObjetoNulo
        {
            get { return _erroObjetoNulo; }
            set { _erroObjetoNulo = value; }
        }
        #endregion
        #region Métodos
        public List<ValidationError> GetErrors()
        {
            return base.ErrorsList;
        }

        public void Validate()
        {
            if (base.EntityToValidate != null)
            {
                Parametro.BusinessLogic.Parametro bl = new Parametro.BusinessLogic.Parametro();
                Parametro.BusinessEntity.Parametro response = bl.RecuperarIndicadorDigitoCliente();
                if (response.IndicadorDigitoCliente != string.Empty)
                {
                    Cliente.BusinessEntity.Parameter.FiltroCliente request = new Cliente.BusinessEntity.Parameter.FiltroCliente();
                    request.Codigo = EntityToValidate.DadosAlocacao.Cliente;
                    Cliente.BusinessLogic.Cliente blCliente = new Sinacor.Servico.Bovespa.Cliente.BusinessLogic.Cliente();                    
                    Cliente.BusinessEntity.Cliente responseCliente = blCliente.ObterCliente(request);
                    if (!(EntityToValidate.DadosAlocacao.DigitoVerificadorCliente == responseCliente.Digito))
                        base.AddValidationError(DVClienteInvalido);
                }
            }
            else
                base.AddValidationError(ErroObjetoNulo);

        }
        #endregion
    }

}